const { createStore } = require('redux')

// store(对象,但是这个对象是通过createStore创建的), action,reducer(函数,我们需要自己定义)

// 注意: reducer的返回值是什么,则store中存储的数据就被改成了什么
// 假设state的数据是这样的 : {count: 0,msg: 'hello redux'}
// reducer的执行时机:
// 1. createStore的时候,为了初始化store的数据
// 2. 调用了store.dispatch的时候,reducer会执行, 为了修改数据
function reducer(state = { count: 0, msg: 'hello redux' }, action) {
  // state 就是store中管理的所有的数据
  // action 就是需求  action的具体表现形式是一个对象 {type: 'jia'}
  // 目前这个reducer能干的事情: 1. 数字加1, 2. 数字减1
  //   console.log(state, action)
  switch (action.type) {
    case 'jia':
      return {
        ...state, //保留不需要被修改的数据
        count: state.count + 1,
      }
    case 'jian':
      return {
        ...state,
        count: state.count - 1,
      }
    //   为了初始化数据
    default:
      return state
  }
}
// 创建store对象
// const store = createStore(reducer函数)
const store = createStore(reducer)

// 查看store里面的数据
// console.log(store.getState()) // 默认store中的数据是undefined.我们需要初始化数据

// 监听数据变化的方法:
store.subscribe(() => {
  // 一旦store的数据变化,则这个函数就会执行
  console.log(store.getState())
})

// 如何修改数据
// store.dispatch(action对象)
store.dispatch({ type: 'jia' })
// console.log(store.getState())
store.dispatch({ type: 'jian' })
